package top.faig.blog.file;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import top.faig.blog.code.file.entity.File;
import top.faig.blog.code.file.mapper.FileMapper;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;

/**
 * <p>
 * 文件表 服务实现类
 * </p>
 *
 * @author fhs
 * @since 2020-04-27
 */
@Service
public class FileService extends ServiceImpl<FileMapper, File> {

    @Value("${system.file-save-win}")
    private String systemSaveWin;

    @Value("${system.file-save-linux}")
    private String systemSaveLinux;

    @Async
    public String upload(MultipartFile picture, String savePath) {
        // 获取文件地址  可存储到静态资源服务器
        // 获取项目位置
        String path = "";

        if (System.getProperties().getProperty("os.name").toUpperCase().indexOf("WINDOWS") != -1){
            // windows
            path += System.getProperty("user.dir") + systemSaveWin + savePath.replace("/", "\\");
        } else {
            // Linux
            path += systemSaveLinux + savePath;
        }
        java.io.File filePath = new java.io.File(path);
        if (!filePath.exists() && !filePath.isDirectory()) {
            filePath.mkdirs();
        }
        //获取原始文件名称(包含格式)
        String originalFileName = picture.getOriginalFilename();

        System.out.println("原始文件名称：" + originalFileName);

        //获取文件类型，以最后一个`.`为标识
        String type = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
        System.out.println("文件类型：" + type);

        //获取文件名称（不包含格式）
        // String name = originalFileName.substring(0, originalFileName.lastIndexOf("."));


        //设置文件新名称: 当前时间+文件名称（不包含格式）
        Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        String fileName = milliSecond + "." + type;

        //在指定路径下创建一个文件
        java.io.File targetFile = new java.io.File(path, fileName);
        //将文件保存到服务器指定位置
        try {
            picture.transferTo(targetFile);
            File file = new File();
            file.setName(fileName);
            file.setPath(path);
            file.setType(type);
            file.setSize(picture.getSize());
            file.setImg( savePath + "/" +  fileName);
            this.save(file);
            //将文件在服务器的存储路径返回
            return savePath + "/" +  fileName;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}
